package day03;

/**
 * @author aiPlusPlus
 * @version 1.0
 * @date 2023/1/3 9:29
 */

/**
 * 一个整型数组 nums 里除两个数字之外，其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n)，空间复杂度是O(1)。
 *
 *
 *
 * 示例 1：
 *
 * 输入：nums = [4,1,4,6]
 * 输出：[1,6] 或 [6,1]
 * 示例 2：
 *
 * 输入：nums = [1,2,10,4,1,4,3,3]
 * 输出：[2,10] 或 [10,2]
 */
public class Solution2 {
    public int[] singleNumbers(int[] nums) {
        int pre = 0;
        int []ans = new int[2];
        for (int num : nums) {
            pre^=num;
        }
        int low = pre&(-pre);
        for (int num : nums) {
            if((low&num)==0){
                ans[0]^=num;
            }else {
                ans[1]^=num;
            }
        }
        return ans;
    }
}
